#pragma once

#include "manager.hpp"
#include "logbuilder.hpp"

namespace Log 
{
    // 用户获取日志器
    inline AsyncLoggerPtr GetLogger(const std::string &name) 
    {
        return LoggerMgr::Instance().GetLogger(name);
    }

    // 用户获取默认日志器
    // AsyncLoggerPtr DefaultLogger() 
    // { 
    //     return LoggerMgr::Instance().DefaultLogger(); 
    // }

    // 简化用户使用，宏函数默认填上文件+行号
    #define Debug(fmt, ...) Debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define Info(fmt, ...)  Info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define Warn(fmt, ...)  Warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define Error(fmt, ...) Error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
    #define Fatal(fmt, ...) Fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

    // 无需获取日志器，默认标准输出
    #define LOGDEBUGDEFAULT(fmt, ...) Log::DefaultLogger()->Debug(fmt, ##__VA_ARGS__)
    #define LOGINFODEFAULT(fmt, ...) Log::DefaultLogger()->Info(fmt, ##__VA_ARGS__)
    #define LOGWARNDEFAULT(fmt, ...) Log::DefaultLogger()->Warn(fmt, ##__VA_ARGS__)
    #define LOGERRORDEFAULT(fmt, ...) Log::DefaultLogger()->Error(fmt, ##__VA_ARGS__)
    #define LOGFATALDEFAULT(fmt, ...) Log::DefaultLogger()->Fatal(fmt, ##__VA_ARGS__)
}  // namespace Log